<html>
<head>
<title>Remake de Fruity Frank - Version 0.09</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.SpanClass0 {
	color: #808080;
}
.SpanClass3 {
	color: #008080;
}
.SpanClass5 {
	font-weight: bold;
	color: #0000FF;
}
.SpanClass7 {
	color: #808080;
}
.SpanClass10 {
	font-weight: bold;
	color: #000080;
}
.SpanClass11 {
}
</style>
</head>
<body bgcolor="#FFFFFF">
<h2>Remake (parcial) de Fruity Frank... 09 - Obst&aacute;culos le&iacute;dos del mapa</h2>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>

<p>Con la estructura que tenemos hasta ahora, es f&aacute;cil comprobar si hay un obst&aacute;culo en alg&uacute;n punto de la pantalla de juego.</p>

<p>La diferencia con lo que hemos hecho para &quot;recoger premios&quot; es que antes comprob&aacute;bamos lo que hab&iacute;a en una casilla cuando acab&aacute;bamos de entrar a ella. Por el contrario, si se trata de un obst&aacute;culo, no deber&iacute;amos movernos a esa casilla, sino comprobar antes. Pero es f&aacute;cil: ya est&aacute;bamos comprobando si pod&iacute;amos desplazarnos a una cierta posici&oacute;n de la pantalla o si estaba fuera de los m&aacute;rgenes, as&iacute; que ahora es s&oacute;lo a&ntilde;adir una condici&oacute;n m&aacute;s:</p>

<pre><code>          if ( SDLA_teclaPulsada (TECLA_ARR) ) {
          if ((yPersonaje &gt; 0)
              &amp;&amp; (mapa1[yPersonaje-1][xPersonaje] != 'M'))
            yPersonaje --;
        }</code></pre>

<p>En esta expresi&oacute;n hay algo que puede desconcertar: si estamos en la columna 0... &iquest;no ser&iacute;a peligroso mirar en &quot;mapa1[yPersonaje-1][xPersonaje]&quot;, es decir, en la columna &quot;-1&quot;?  La respuesta es que NO: los compiladores de C eval&uacute;an las condiciones usando la t&eacute;cnica de &quot;evaluaci&oacute;n en cortocircuito&quot;: si se trata de dos condiciones unidas por un &quot;Y&quot; (&amp;&amp;) y la primera condici&oacute;n es falsa, no se molestan en comprobar la segunda condici&oacute;n, porque ya se sabe que el resultado de la condici&oacute;n global ser&aacute; &quot;falso&quot;. Por eso, si estamos en la columna 0, no se llegar&aacute; a comprobar qu&eacute; habr&iacute;a en la columna -1.</p>

<p>Las dem&aacute;s comparaciones son similares a la anterior:</p>

<pre><code>          if ( SDLA_teclaPulsada (TECLA_ABA) ) {
          if ((yPersonaje &lt; MAXFILAS-1)
              &amp;&amp; (mapa1[yPersonaje+1][xPersonaje] != 'M'))
            yPersonaje ++;
        }</code></pre>

        
<p><br />De paso, podemos hacer otra mejora: mostrar los puntos que vamos obteniendo durante el juego.</p>

<p>Eso supone dos peque&ntilde;os cambios. El primero es declarar y cargar nuestro tipo de letra al principio del programa:</p>
        
<pre><code>    SDLA_Fuente* SDLA_arial14;
    SDLA_arial14 = SDLA_cargarFuente(&quot;arial.ttf&quot;,14);</code></pre>

<p>El segundo es usar la funci&oacute;n de &quot;EscribirTextoOculta&quot; para escribir textos, o &quot;EscribirLongOculta&quot; para escribir n&uacute;meros (enteros largos):</p>    

<pre><code>        SDLA_escribirTextoOculta(&quot;Puntos&quot;,20,60,0x88FFFF, SDLA_arial14);
        SDLA_escribirLongOculta(puntos,70,60,0xFFFF88, SDLA_arial14);</code></pre>

<p>Por supuesto, cada vez que recojamos una cereza deber&iacute;amos obtener puntos, para que ese marcador aumente... pero eso ya no es dif&iacute;cil de hacer a esta altura.</p>

<p>(Nota: eso de poder escribir n&uacute;meros ha supuesto hacer un cambio en los ficheros auxiliares SDL_ASI.h y sdlasi.c; tendr&aacute;s que incluir en el proyecto los ficheros actualizados, o no compilar&aacute;...)</p>


<p>Como siempre, puedes ver todo el proyecto en: <a href="http://code.google.com/p/fruityfrank"> code.google.com/p/fruityfrank</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
